在 Kanzi 中使用 OpenGL ES 3.0

Kanzi 支持 OpenGL ES 3.0 着色语言(GLSL ES 版本 300)。借助 OpenGL ES 3.0,您可以使用整数纹理、浮点以及多个渲染目标。例如,这样渲染出来的图像精度更高,您可以应用看起来更好的后处理效果,将 HDR 用于纹理和环境纹理,以及创建无缝的环境纹理。

使用 OpenGL ES 3.0 之前,确保您的目标平台支持 OpenGL ES 3.0。

要在 Kanzi 中使用 OpenGL ES 3.0:

设置 纹理的颜色格式

您可采用 .dds 格式将 HDR 和浮点图像导入您的 Kanzi Studio 工程,并设置使用这些图像的纹理的颜色格式。

要设置纹理的颜色格式:

  1. 在工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3。
  2. 在 素材库 (Library) > 资源文件 (Resource Files) > 图像 (Images) 中,选择您要设置其颜色格式的图像。
  3. 在属性 (Properties) 中,将目标格式 (Target Format) 属性设置为Raw。
  4. 在属性 (Properties) 中,将Raw 颜色格式 (Color Format in Raw) 属性设为您希望 Kanzi 用于解释该纹理的颜色格式。
  5. 在素材库 (Library) > 材质和纹理 (Materials and Textures) > Textures 中,选择使用您在上述步骤中设置了颜色格式的图像的纹理,然后在属性 (Properties) 中设置:

设置渲染目标纹理的格式

设置渲染目标纹理的格式,以定义 GPU 使用的目标像素格式。

要设置渲染目标纹理的格式:

  1. 在工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3。
  2. 在素材库 (Library) > 材质和纹理 (Materials and Textures) > Textures 中选择或创建渲染目标纹理 (Render Target Texture)。
  3. 在 属性 (Properties) 的 纹理设置 (Texture Settings) 中,将 格式 (Format) 设为您要使用的目标像素格式。
  4. 如果您的渲染目标纹理采用整数目标格式,请将 缩小过滤器 (Minification Filter) 和 放大过滤器 (Magnification Filter) 属性设为 最近点 (Nearest)。

使用多个渲染目标

要使用多个渲染目标:

  1. 在工程 (Project) > 属性 (Properties)中,将目标图形 API (Target Graphics API) 设置为OpenGL ES 3。
  2. 在素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) 中选择或创建旧渲染通道(已停用)(Legacy Render Pass, deprecated)。
  3. 在 属性 (Properties) 中点击 并添加 渲染目标颜色 (Render Target Color) 属性。
    您可以向 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 添加并建立最多四个颜色附件。
  4. 将各个 渲染目标颜色 (Render Target Color) 属性设为您希望其渲染的位置。
    您可以将 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 设为渲染到屏幕或渲染到渲染目标颜色附件纹理。您必须按顺序设置彩色附件,没有间隙:
  5. 在着色器中,设为您要写入的布局位置。例如,如果您使用两个颜色附件纹理,在着色器中您可以设置
    layout(location = 0) out mediump vec4 outColor;
    layout(location = 1) out mediump vec3 outNormal;
  6. 如果您对 旧渲染通道(已停用)(Legacy Render Pass, deprecated) 启用了 清除颜色 (Clear Color) 属性,对各 渲染目标颜色 (Render Target Color) 属性通过使用 清除颜色(颜色缓冲区 0)(Clear Color, Color Buffer 0) 将清除颜色设为 清除颜色(颜色缓冲区 3)(Clear Color, Color Buffer 3) 属性,或将 颜色缓冲区 0 清除值(浮点)(Color Buffer 0 Clear Value, float) (颜色缓冲区 0 清除值(整数)(Color Buffer 0 Clear Value, integer)) 设为 颜色缓冲区 3 清除值(浮点)(Color Buffer 3 Clear Value, float) (颜色缓冲区 3 清除值(整数)(Color Buffer 3 Clear Value, integer)) 属性:

选择运行时图形后端

在 Windows 操作系统中,您可以选择是否要在 Application::onConfigure() 函数中、application.cfg 中使用 OpenGL ES 或 OpenGL,或是否使用命令行参数(如您的目标支持的话)。

在命令行使用:

对于 application.cfgGraphicsBackend = type
在 onConfigure() 中configuration.defaultSurfaceProperties.type = type;
configuration.defaultSurfaceProperties.contextApi = contextAPI;
值
type

要使用 OpenGL ES 并将图形上下文设置为 EGL,请执行以下操作:

要使用 OpenGL 并将图形上下文设置为 WGL,请执行以下操作:

contextAPI

要使用 WGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_WGL。

要使用 EGL,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_EGL。

要使用 GLX,在 onConfigure() 中使用 KZS_GRAPHICS_CONTEXT_API_GLX。

application.cfg 示例
# 为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
GraphicsBackend = opengl
onConfigure() 示例
//为 OpenGL 渲染和 WGL 图形上下文设置表面目标。
configuration.defaultSurfaceProperties.type = KZS_SURFACE_TYPE_GL_ONLY;